<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Flow-IPC: session/detail/shm/arena_lend/jemalloc/server_session_impl.hpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectalign">
   <div id="projectname">Flow-IPC<span id="projectnumber">&#160;2.0.0</span>
   </div>
   <div id="projectbrief">Flow-IPC project: Full implementation reference.</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_b574b0807182fd54d29cf48452072c45.html">session</a></li><li class="navelem"><a class="el" href="dir_e8a6be6454742763ef88d859db4d5829.html">detail</a></li><li class="navelem"><a class="el" href="dir_0ec06e8c7fb5f28b16ad5cd684ffbafc.html">shm</a></li><li class="navelem"><a class="el" href="dir_227cbe559f4164f1c4cf4abf7bafbe8c.html">arena_lend</a></li><li class="navelem"><a class="el" href="dir_2274bd8bf2aa5079c91aaa407be30e38.html">jemalloc</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="headertitle"><div class="title">server_session_impl.hpp</div></div>
</div><!--header-->
<div class="contents">
<a href="ipc__shm__arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2server__session__impl_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span><span class="comment">/* Flow-IPC: SHM-jemalloc</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno">    2</span><span class="comment"> * Copyright (c) 2023 Akamai Technologies, Inc.; and other contributors.</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno">    3</span><span class="comment"> * Each commit is copyright by its respective author or author&#39;s employer.</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno">    4</span><span class="comment"> *</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno">    5</span><span class="comment"> * Licensed under the MIT License:</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno">    6</span><span class="comment"> *</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno">    7</span><span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno">    8</span><span class="comment"> * of this software and associated documentation files (the &quot;Software&quot;), to deal</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno">    9</span><span class="comment"> * in the Software without restriction, including without limitation the rights</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno">   10</span><span class="comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno">   11</span><span class="comment"> * copies of the Software, and to permit persons to whom the Software is</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno">   12</span><span class="comment"> * furnished to do so, subject to the following conditions:</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno">   13</span><span class="comment"> *</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno">   14</span><span class="comment"> * The above copyright notice and this permission notice shall be included in</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno">   15</span><span class="comment"> * all copies or substantial portions of the Software.</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno">   16</span><span class="comment"> *</span></div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span><span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span><span class="comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno">   19</span><span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span><span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span><span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</span></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno">   22</span><span class="comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN</span></div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno">   23</span><span class="comment"> * THE SOFTWARE. */</span></div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno">   24</span><span class="comment"></span> </div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno">   25</span><span class="comment">/// @file</span></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno">   26</span><span class="comment"></span><span class="preprocessor">#pragma once</span></div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno">   27</span> </div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span><span class="preprocessor">#include &quot;<a class="code" href="arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2session__impl_8hpp.html">ipc/session/detail/shm/arena_lend/jemalloc/session_impl.hpp</a>&quot;</span></div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span><span class="preprocessor">#include &quot;<a class="code" href="ipc__session_2src_2ipc_2session_2detail_2server__session__impl_8hpp.html">ipc/session/detail/server_session_impl.hpp</a>&quot;</span></div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span><span class="preprocessor">#include &quot;<a class="code" href="ipc__session_2src_2ipc_2session_2error_8hpp.html">ipc/session/error.hpp</a>&quot;</span></div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno">   31</span><span class="preprocessor">#include &lt;boost/move/make_unique.hpp&gt;</span></div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno">   32</span> </div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno">   33</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespaceipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc.html">ipc::session::shm::arena_lend::jemalloc</a></div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno">   34</span>{</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno">   35</span> </div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno">   36</span><span class="comment">// Types.</span></div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno">   37</span><span class="comment"></span> </div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno">   38</span><span class="comment">/**</span></div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno">   39</span><span class="comment"> * Core internally-used implementation of shm::arena_lend::jemalloc::Server_session: it is to the latter what</span></div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno">   40</span><span class="comment"> * its `public` super-class Server_session_impl is to #Server_session.</span></div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno">   41</span><span class="comment"> *</span></div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno">   42</span><span class="comment"> * @see shm::arena_lend::jemalloc::Server_session doc header which covers both its public behavior/API and a</span></div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno">   43</span><span class="comment"> *      detailed sketch of the entire implementation.</span></div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno">   44</span><span class="comment"> *</span></div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno">   45</span><span class="comment"> * @tparam S_MQ_TYPE_OR_NONE</span></div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno">   46</span><span class="comment"> *         See shm::arena_lend::jemalloc::Server_session counterpart.</span></div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno">   47</span><span class="comment"> * @tparam S_TRANSMIT_NATIVE_HANDLES</span></div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno">   48</span><span class="comment"> *         See shm::arena_lend::jemalloc::Server_session counterpart.</span></div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno">   49</span><span class="comment"> * @tparam Mdt_payload</span></div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno">   50</span><span class="comment"> *         See shm::arena_lend::jemalloc::Server_session counterpart.</span></div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno">   51</span><span class="comment"> */</span></div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno">   52</span><span class="keyword">template</span>&lt;session::schema::MqType S_MQ_TYPE_OR_NONE, <span class="keywordtype">bool</span> S_TRANSMIT_NATIVE_HANDLES, <span class="keyword">typename</span> Mdt_payload&gt;</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html">   53</a></span><span class="keyword">class </span><a class="code hl_class" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html">Server_session_impl</a> :</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno">   54</span>  <span class="keyword">public</span> <a class="code hl_class" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Session__impl.html">Session_impl</a></div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno">   55</span>           &lt;session::Server_session_impl&lt;S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload,</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno">   56</span>                                         session::schema::ShmType::JEMALLOC,</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno">   57</span>                                         transport::struc::shm::Builder_base::S_MAX_SERIALIZATION_SEGMENT_SZ,</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno">   58</span>                                         <span class="comment">// Session_base::Graceful_finisher doc header explains why true here:</span></div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno">   59</span>                                         true&gt;&gt;</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno">   60</span>{</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno">   61</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno">   62</span>  <span class="comment">// Types.</span></div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno">   63</span><span class="comment"></span> </div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno">   64</span><span class="comment">  /// Short-hand for our non-`virtual` base.</span></div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html#a9e77771dc08dc94622556973e482cceb">   65</a></span><span class="comment"></span>  <span class="keyword">using </span><a class="code hl_class" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Session__impl.html">Base</a> = <a class="code hl_class" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Session__impl.html">Session_impl</a></div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno">   66</span>                 &lt;<a class="code hl_class" href="classipc_1_1session_1_1Server__session__impl.html">session::Server_session_impl</a>&lt;S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload,</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno">   67</span>                                               session::schema::ShmType::JEMALLOC,</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno">   68</span>                                               <a class="code hl_variable" href="classipc_1_1transport_1_1struc_1_1shm_1_1Builder__base.html#a2dae5df49d355c6f2199af42fff9befd">transport::struc::shm::Builder_base::S_MAX_SERIALIZATION_SEGMENT_SZ</a>,</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno">   69</span>                                               <span class="keyword">true</span>&gt;&gt;;</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno">   70</span><span class="comment"></span> </div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno">   71</span><span class="comment">  /// See shm::arena_lend::jemalloc::Server_session_mv counterpart for public description.</span></div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"><a class="line" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html#a419e6b9737b229b69acb21f1935279d7">   72</a></span><span class="comment"></span>  <span class="keyword">using </span><a class="code hl_typedef" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html#a419e6b9737b229b69acb21f1935279d7">Arena</a> = <span class="keyword">typename</span> <a class="code hl_typedef" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Session__impl.html#a05a924415ca44783d3ef5c0efb31f42e">Base::Arena</a>;</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno">   73</span><span class="comment"></span> </div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno">   74</span><span class="comment">  /// See shm::arena_lend::jemalloc::Server_session_mv counterpart for public description.</span></div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"><a class="line" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html#a4e2bf38dda62aec101edf2ad5c1f6233">   75</a></span><span class="comment"></span>  <span class="keyword">using </span><a class="code hl_struct" href="structipc_1_1transport_1_1struc_1_1Heap__fixed__builder_1_1Config.html">Structured_msg_builder_config</a> = <span class="keyword">typename</span> <a class="code hl_typedef" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Session__impl.html#a8592edcdb25d0c824a2e72e1539c884f">Base::Structured_msg_builder_config</a>;</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno">   76</span> </div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno">   77</span>  <span class="comment">// Constructors/destructor.</span></div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno">   78</span><span class="comment"></span> </div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno">   79</span><span class="comment">  /// Inherit ctor.</span></div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno">   80</span><span class="comment"></span>  <span class="keyword">using </span><a class="code hl_class" href="classipc_1_1session_1_1Server__session__impl.html">Base::Base</a>;</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno">   81</span><span class="comment"></span> </div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno">   82</span><span class="comment">  /**</span></div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno">   83</span><span class="comment">   * Destructor.</span></div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno">   84</span><span class="comment">   * Internally: at least does what it must according to session::Server_session_impl::dtor_async_worker_stop()</span></div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno">   85</span><span class="comment">   * doc header contract.  See inside for comment more resembling English hopefully.</span></div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno">   86</span><span class="comment">   */</span></div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno">   87</span>  <a class="code hl_function" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html#a3bbc851d9731109b3b8cc76fb8fcaa6d">~Server_session_impl</a>();</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno">   88</span> </div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno">   89</span>  <span class="comment">// Methods.</span></div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno">   90</span><span class="comment"></span> </div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno">   91</span><span class="comment">  /**</span></div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno">   92</span><span class="comment">   * For use by internal user Session_server: See Server_session_mv counterpart.  While the formal contract</span></div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno">   93</span><span class="comment">   * here is unchanged from vanilla Server_session_impl, internally: this one, before `on_done_func()` can be invoked</span></div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno">   94</span><span class="comment">   * successfully, takes care of a number of SHM setup tasks including establishing an internal-SHM-provider-use</span></div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno">   95</span><span class="comment">   * IPC channel to the opposing Client_session_impl.</span></div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno">   96</span><span class="comment">   *</span></div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno">   97</span><span class="comment">   * @param srv</span></div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno">   98</span><span class="comment">   *        See Server_session_mv counterpart.</span></div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno">   99</span><span class="comment">   * @param init_channels_by_srv_req</span></div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno">  100</span><span class="comment">   *        See Server_session_mv counterpart.</span></div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno">  101</span><span class="comment">   * @param mdt_from_cli_or_null</span></div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno">  102</span><span class="comment">   *        See Server_session_mv counterpart.</span></div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno">  103</span><span class="comment">   * @param init_channels_by_cli_req</span></div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno">  104</span><span class="comment">   *        See Server_session_mv counterpart.</span></div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno">  105</span><span class="comment">   * @param cli_app_lookup_func</span></div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno">  106</span><span class="comment">   *        See Server_session_mv counterpart.</span></div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno">  107</span><span class="comment">   * @param cli_namespace_func</span></div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno">  108</span><span class="comment">   *        See Server_session_mv counterpart.</span></div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno">  109</span><span class="comment">   * @param pre_rsp_setup_func</span></div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno">  110</span><span class="comment">   *        See Server_session_mv counterpart.</span></div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno">  111</span><span class="comment">   * @param n_init_channels_by_srv_req_func</span></div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno">  112</span><span class="comment">   *        See Server_session_mv counterpart.</span></div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno">  113</span><span class="comment">   * @param mdt_load_func</span></div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno">  114</span><span class="comment">   *        See Server_session_mv counterpart.</span></div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno">  115</span><span class="comment">   * @param on_done_func</span></div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno">  116</span><span class="comment">   *        See Server_session_mv counterpart.</span></div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno">  117</span><span class="comment">   */</span></div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno">  118</span>  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Session_server_impl_t,</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno">  119</span>           <span class="keyword">typename</span> Task_err, <span class="keyword">typename</span> Cli_app_lookup_func, <span class="keyword">typename</span> Cli_namespace_func, <span class="keyword">typename</span> Pre_rsp_setup_func,</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno">  120</span>           <span class="keyword">typename</span> N_init_channels_by_srv_req_func, <span class="keyword">typename</span> Mdt_load_func&gt;</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno">  121</span>  <span class="keywordtype">void</span> <a class="code hl_function" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html#a6c68c8b048d1297d18a5e75c16a4fb76">async_accept_log_in</a>(Session_server_impl_t* srv,</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno">  122</span>                           <span class="keyword">typename</span> <a class="code hl_typedef" href="classipc_1_1session_1_1Session__base.html#a638232ef74a0eb80aeb4f027ee06f9bf">Base::Base::Channels</a>* init_channels_by_srv_req,</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno">  123</span>                           <span class="keyword">typename</span> <a class="code hl_typedef" href="classipc_1_1session_1_1Session__base.html#ace4dab42adec6354cc66081dd218ac71">Base::Base::Mdt_reader_ptr</a>* mdt_from_cli_or_null,</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno">  124</span>                           <span class="keyword">typename</span> <a class="code hl_typedef" href="classipc_1_1session_1_1Session__base.html#a638232ef74a0eb80aeb4f027ee06f9bf">Base::Base::Channels</a>* init_channels_by_cli_req,</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno">  125</span>                           Cli_app_lookup_func&amp;&amp; cli_app_lookup_func, Cli_namespace_func&amp;&amp; cli_namespace_func,</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno">  126</span>                           Pre_rsp_setup_func&amp;&amp; pre_rsp_setup_func,</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno">  127</span>                           N_init_channels_by_srv_req_func&amp;&amp; n_init_channels_by_srv_req_func,</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno">  128</span>                           Mdt_load_func&amp;&amp; mdt_load_func,</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno">  129</span>                           Task_err&amp;&amp; on_done_func);</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno">  130</span><span class="comment"></span> </div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno">  131</span><span class="comment">  /**</span></div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno">  132</span><span class="comment">   * See shm::arena_lend::jemalloc::Server_session_mv counterpart.</span></div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno">  133</span><span class="comment">   * @return See shm::arena_lend::jemalloc::Server_session_mv counterpart.</span></div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno">  134</span><span class="comment">   */</span></div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno">  135</span>  <a class="code hl_typedef" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html#a419e6b9737b229b69acb21f1935279d7">Arena</a>* <a class="code hl_function" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html#ae2e83cdf0618060b04181ac55abd8ffd">app_shm</a>();</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno">  136</span><span class="comment"></span> </div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno">  137</span><span class="comment">  /**</span></div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno">  138</span><span class="comment">   * See shm::arena_lend::jemalloc::Server_session_mv counterpart.</span></div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno">  139</span><span class="comment">   * @return See shm::arena_lend::jemalloc::Server_session_mv counterpart.</span></div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno">  140</span><span class="comment">   */</span></div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno">  141</span>  std::shared_ptr&lt;Arena&gt; <a class="code hl_function" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html#ae34016bc752a1d6fb16aef7f9ab6bfa3">app_shm_ptr</a>();</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno">  142</span><span class="comment"></span> </div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno">  143</span><span class="comment">  /**</span></div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno">  144</span><span class="comment">   * See shm::arena_lend::jemalloc::Server_session_mv counterpart.</span></div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno">  145</span><span class="comment">   * @return See shm::arena_lend::jemalloc::Server_session_mv counterpart.</span></div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno">  146</span><span class="comment">   */</span></div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno">  147</span>  <a class="code hl_struct" href="structipc_1_1transport_1_1struc_1_1Heap__fixed__builder_1_1Config.html">Structured_msg_builder_config</a> <a class="code hl_function" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html#a0a026eaa6e6e1bb3d5d986d3da7d04db">app_shm_builder_config</a>();</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno">  148</span><span class="comment"></span> </div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno">  149</span><span class="comment">  /**</span></div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno">  150</span><span class="comment">   * See shm::arena_lend::jemalloc::Session_mv counterpart.</span></div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno">  151</span><span class="comment">   * @return See shm::arena_lend::jemalloc::Session_mv counterpart.</span></div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno">  152</span><span class="comment">   */</span></div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno">  153</span>  <span class="keyword">typename</span> <a class="code hl_typedef" href="classipc_1_1transport_1_1struc_1_1Heap__fixed__builder.html#ab01fea591145a42c216a5bb396cf0be7">Structured_msg_builder_config::Builder::Session</a> <a class="code hl_function" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html#af3185eb90a691384329b92080bc7fc20">app_shm_lender_session</a>();</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno">  154</span> </div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno">  155</span>  <span class="comment">// The LOG_*() macros don&#39;t see Log_context::get_log*() from base otherwise....</span></div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno">  156</span>  <span class="keyword">using </span>flow::log::Log_context::get_logger;</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno">  157</span>  <span class="keyword">using </span>flow::log::Log_context::get_log_component;</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno">  158</span> </div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno">  159</span><span class="keyword">private</span>:</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno">  160</span>  <span class="comment">// Data.</span></div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno">  161</span><span class="comment"></span> </div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno">  162</span><span class="comment">  /// See app_shm(): The cached value from Session_server::app_shm_ptr() applicable to our opposing Client_app.</span></div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"><a class="line" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html#a6029703c6907e5bb96641aa94cd5cfe1">  163</a></span><span class="comment"></span>  std::shared_ptr&lt;Arena&gt; <a class="code hl_variable" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html#a6029703c6907e5bb96641aa94cd5cfe1">m_app_shm</a>;</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno">  164</span>}; <span class="comment">// class Server_session_impl</span></div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno">  165</span> </div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno">  166</span><span class="comment">// Free functions: in *_fwd.hpp.</span></div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno">  167</span> </div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno">  168</span><span class="comment">// Template implementations.</span></div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno">  169</span><span class="comment"></span> </div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno">  170</span><span class="comment">/// Internally used macro; public API users should disregard (same deal as in struc/channel.hpp).</span></div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"><a class="line" href="ipc__shm__arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2server__session__impl_8hpp.html#ab2e1ffb7b637fc3fd1ce52265c2ec985">  171</a></span><span class="comment"></span><span class="preprocessor">#define TEMPLATE_JEM_SRV_SESSION_IMPL \</span></div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno">  172</span><span class="preprocessor">  template&lt;session::schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload&gt;</span><span class="comment"></span></div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno">  173</span><span class="comment">/// Internally used macro; public API users should disregard (same deal as in struc/channel.hpp).</span></div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"><a class="line" href="ipc__shm__arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2server__session__impl_8hpp.html#ab95c6d45b5d7bb19f68776ae7d07dda6">  174</a></span><span class="comment"></span><span class="preprocessor">#define CLASS_JEM_SRV_SESSION_IMPL \</span></div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno">  175</span><span class="preprocessor">  Server_session_impl&lt;S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload&gt;</span></div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno">  176</span> </div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno">  177</span><a class="code hl_define" href="ipc__shm__arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2server__session__impl_8hpp.html#ab2e1ffb7b637fc3fd1ce52265c2ec985">TEMPLATE_JEM_SRV_SESSION_IMPL</a></div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"><a class="line" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html#a3bbc851d9731109b3b8cc76fb8fcaa6d">  178</a></span>CLASS_JEM_SRV_SESSION_IMPL::~Server_session_impl()</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno">  179</span>{</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno">  180</span>  <span class="comment">/* Since we are subclass of Base::Base (session::Server_session_impl), and we do post our own tasks onto thread W</span></div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno">  181</span><span class="comment">   * (otherwise maintained by Base::Base), this protected guy&#39;s doc header says we must call it.  So formally speaking</span></div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno">  182</span><span class="comment">   * that&#39;s why we do it.  More in English, though: if a subclass of session::Server_session_impl (us, or perhaps</span></div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno">  183</span><span class="comment">   * Base) has queued a task F on thread W (async_worker()), and this dtor is called, and F() touches some part of</span></div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno">  184</span><span class="comment">   * *this or (Base&amp;)(*this), then there can be undefined-behavior and/or concurrent-access trouble.  Once</span></div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno">  185</span><span class="comment">   * Base::Base::~Base() is reached, we&#39;re safe, as it stop()s thread W in civilized fashion first-thing, synchronously,</span></div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno">  186</span><span class="comment">   * before letting its own destruction continue.  So this causes the stop()page to occur somewhat earlier, so that</span></div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno">  187</span><span class="comment">   * we too can feel peace: */</span></div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno">  188</span>  Base::Base::dtor_async_worker_stop();</div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno">  189</span>  <span class="comment">// Thread W has been joined.</span></div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno">  190</span>}</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno">  191</span> </div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno">  192</span><a class="code hl_define" href="ipc__shm__arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2server__session__impl_8hpp.html#ab2e1ffb7b637fc3fd1ce52265c2ec985">TEMPLATE_JEM_SRV_SESSION_IMPL</a></div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno">  193</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> Session_server_impl_t,</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno">  194</span>         <span class="keyword">typename</span> Task_err, <span class="keyword">typename</span> Cli_app_lookup_func, <span class="keyword">typename</span> Cli_namespace_func, <span class="keyword">typename</span> Pre_rsp_setup_func,</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno">  195</span>         <span class="keyword">typename</span> N_init_channels_by_srv_req_func, <span class="keyword">typename</span> Mdt_load_func&gt;</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"><a class="line" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html#a6c68c8b048d1297d18a5e75c16a4fb76">  196</a></span><span class="keywordtype">void</span> CLASS_JEM_SRV_SESSION_IMPL::async_accept_log_in</div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno">  197</span>       (Session_server_impl_t* srv,</div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno">  198</span>        <span class="keyword">typename</span> <a class="code hl_typedef" href="classipc_1_1session_1_1Session__base.html#a638232ef74a0eb80aeb4f027ee06f9bf">Base::Base::Channels</a>* init_channels_by_srv_req,</div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno">  199</span>        <span class="keyword">typename</span> <a class="code hl_typedef" href="classipc_1_1session_1_1Session__base.html#ace4dab42adec6354cc66081dd218ac71">Base::Base::Mdt_reader_ptr</a>* mdt_from_cli_or_null,</div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno">  200</span>        <span class="keyword">typename</span> <a class="code hl_typedef" href="classipc_1_1session_1_1Session__base.html#a638232ef74a0eb80aeb4f027ee06f9bf">Base::Base::Channels</a>* init_channels_by_cli_req,</div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno">  201</span>        Cli_app_lookup_func&amp;&amp; cli_app_lookup_func,</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno">  202</span>        Cli_namespace_func&amp;&amp; cli_namespace_func, Pre_rsp_setup_func&amp;&amp; pre_rsp_setup_func,</div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno">  203</span>        N_init_channels_by_srv_req_func&amp;&amp; n_init_channels_by_srv_req_func, Mdt_load_func&amp;&amp; mdt_load_func,</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno">  204</span>        Task_err&amp;&amp; on_done_func)</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno">  205</span>{</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno">  206</span>  <span class="keyword">using </span><a class="code hl_struct" href="structipc_1_1util_1_1Native__handle.html">util::Native_handle</a>;</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno">  207</span>  <span class="keyword">namespace </span>asio_local = transport::asio_local_stream_socket::local_ns;</div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno">  208</span>  <span class="keyword">using </span>asio_local::connect_pair;</div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno">  209</span>  <span class="keyword">using </span><a class="code hl_typedef" href="namespaceipc_1_1transport_1_1asio__local__stream__socket.html#a1788f9dbd896bb71b3693f9ae25b40ae">transport::asio_local_stream_socket::Peer_socket</a>;</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno">  210</span>  <span class="keyword">using </span>boost::movelib::make_unique;</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno">  211</span> </div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno">  212</span>  <span class="comment">// The extra stuff to do on top of the base vanilla Server_session_impl.</span></div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno">  213</span>  <span class="keyword">auto</span> real_pre_rsp_setup_func</div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno">  214</span>    = [<span class="keyword">this</span>,</div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno">  215</span>       <span class="comment">// Get the Session_server&lt;&gt; such that its core comprises the arg `srv`.</span></div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno">  216</span>       srv = srv-&gt;this_session_srv(),</div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno">  217</span>       pre_rsp_setup_func = std::move(pre_rsp_setup_func)]</div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno">  218</span>        () -&gt; <a class="code hl_typedef" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89">Error_code</a></div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno">  219</span>  {</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno">  220</span>    <span class="comment">// We are in thread W.</span></div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno">  221</span> </div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno">  222</span>    <span class="keyword">auto</span> err_code = pre_rsp_setup_func();</div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno">  223</span>    <span class="keywordflow">if</span> (err_code)</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno">  224</span>    {</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno">  225</span>      <span class="comment">// Any Session_server-given setup failed =&gt; no point in doing our SHM-classic per-session setup.</span></div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno">  226</span>      <span class="keywordflow">return</span> err_code;</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno">  227</span>    }</div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno">  228</span>    <span class="comment">// else</span></div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno">  229</span> </div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno">  230</span>    <span class="comment">/* Do our extra stuff on top of the base vanilla Server_session_impl.  That is Base::session_shm() must</span></div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno">  231</span><span class="comment">     * work (return non-null), as must app_shm() (ditto, cached in this-&gt;m_app_shm); plus lend_object()ing</span></div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno">  232</span><span class="comment">     * objects constructed from either must work, and borrow_object()ing from anything the opposing process</span></div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno">  233</span><span class="comment">     * transmits must work.  The lend/borrow stuff will work only if session_shm() and app_shm() have</span></div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno">  234</span><span class="comment">     * been registered with the lend/borrow engine, namely shm_session().</span></div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno">  235</span><span class="comment">     * Incidentally Base::shm_session() must also be available (return non-null), in case the user wants to</span></div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno">  236</span><span class="comment">     * access that guy directly.</span></div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno">  237</span><span class="comment">     *</span></div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno">  238</span><span class="comment">     * m_app_shm first: please see our class doc header; then come back here.  To summarize:</span></div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno">  239</span><span class="comment">     *   - pre_rsp_setup_func() had to have created what we want app_shm() to return.</span></div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno">  240</span><span class="comment">     *     - If it already existed by then (Client_app seen already), even better.</span></div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno">  241</span><span class="comment">     *     - If that creation failed, then pre_rsp_setup_func() just failed, so we are not here.</span></div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno">  242</span><span class="comment">     *   - Parent session server&#39;s app_shm(&lt;the Client_app&gt;) = what we want. */</span></div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno">  243</span>    m_app_shm = srv-&gt;app_shm_ptr(*(Base::Base::Base::cli_app_ptr()));</div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno">  244</span>    assert(m_app_shm &amp;&amp; <span class="stringliteral">&quot;How can it be null, if pre_rsp_setup_func() returned success?  Contract broken internally?&quot;</span>);</div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno">  245</span> </div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno">  246</span>    <span class="comment">/* Now session_shm(), shm_session(), and registering of the former (and of app_shm()) into shm_session().</span></div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno">  247</span><span class="comment">     * Base::init_shm() takes care of all of it.  However it&#39;s not time</span></div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno">  248</span><span class="comment">     * for that yet: the log-in is not yet complete.  We can&#39;t do other master_channel() traffic yet (and we need</span></div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno">  249</span><span class="comment">     * to for init_shm() purposes).  See below for the post-vanilla-async_accept_log_in() handler steps. */</span></div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno">  250</span> </div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno">  251</span>    <span class="keywordflow">return</span> err_code; <span class="comment">// == Error_code().</span></div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno">  252</span>  }; <span class="comment">// auto real_pre_rsp_setup_func =</span></div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno">  253</span> </div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno">  254</span>  Base::Base::async_accept_log_in(srv,</div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno">  255</span>                                  init_channels_by_srv_req, mdt_from_cli_or_null, init_channels_by_cli_req,</div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno">  256</span>                                  std::move(cli_app_lookup_func),</div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno">  257</span>                                  std::move(cli_namespace_func),</div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno">  258</span>                                  std::move(real_pre_rsp_setup_func),</div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno">  259</span>                                  std::move(n_init_channels_by_srv_req_func),</div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno">  260</span>                                  std::move(mdt_load_func),</div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno">  261</span> </div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno">  262</span>                                  [<span class="keyword">this</span>, srv = srv-&gt;this_session_srv(), on_done_func = std::move(on_done_func)]</div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno">  263</span>                                    (<span class="keyword">const</span> <a class="code hl_typedef" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89">Error_code</a>&amp; async_err_code)</div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno">  264</span>  {</div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno">  265</span>    <span class="comment">// We are in thread W (from Base).</span></div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno">  266</span> </div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno">  267</span>    if (async_err_code == session::error::Code::S_OBJECT_SHUTDOWN_ABORTED_COMPLETION_HANDLER)</div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno">  268</span>    {</div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno">  269</span>      return; <span class="comment">// Stuff is shutting down.  GTFO.</span></div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno">  270</span>    }</div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno">  271</span>    <span class="comment">// else</span></div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno">  272</span> </div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno">  273</span>    <span class="keyword">auto</span> err_code = async_err_code; <span class="comment">// We need to modify it below.</span></div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno">  274</span> </div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno">  275</span>    if (!err_code)</div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno">  276</span>    {</div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno">  277</span>      <span class="comment">// Now resume from inside real_pre_rsp_setup_func().  init_shm() needs our side of the internal-use channel.</span></div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno">  278</span> </div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno">  279</span>      FLOW_LOG_INFO(<span class="stringliteral">&quot;Server session [&quot;</span> &lt;&lt; *<span class="keyword">this</span> &lt;&lt; <span class="stringliteral">&quot;]: Vanilla accept-log-in succeeded; now we will send &quot;</span></div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno">  280</span>                    <span class="stringliteral">&quot;a resource to opposing session-client to enable an internal-IPC channel for arena-lending &quot;</span></div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno">  281</span>                    <span class="stringliteral">&quot;SHM-provider; and set up local SHM objects synchronously.  If it all succeeds we will &quot;</span></div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno">  282</span>                    <span class="stringliteral">&quot;complete the accept-log-in.&quot;</span>);</div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno">  283</span> </div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno">  284</span>      <a class="code hl_typedef" href="namespaceipc_1_1transport_1_1asio__local__stream__socket.html#a1788f9dbd896bb71b3693f9ae25b40ae">Peer_socket</a> local_hndl_asio(*(Base::async_worker()-&gt;task_engine()));</div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno">  285</span>      <a class="code hl_typedef" href="namespaceipc_1_1transport_1_1asio__local__stream__socket.html#a1788f9dbd896bb71b3693f9ae25b40ae">Peer_socket</a> remote_hndl_asio(std::move(local_hndl_asio));</div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno">  286</span>      <a class="code hl_typedef" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89">Error_code</a> sys_err_code;</div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno">  287</span>      connect_pair(local_hndl_asio, remote_hndl_asio, sys_err_code);</div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno">  288</span>      <span class="keywordflow">if</span> (sys_err_code)</div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno">  289</span>      {</div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno">  290</span>        FLOW_LOG_WARNING(<span class="stringliteral">&quot;Server session [&quot;</span> &lt;&lt; *<span class="keyword">this</span> &lt;&lt; <span class="stringliteral">&quot;]: While setting up SHM internal-use channel: &quot;</span></div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno">  291</span>                         <span class="stringliteral">&quot;connect_pair() failed.  Details follow.&quot;</span>);</div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno">  292</span>        FLOW_ERROR_SYS_ERROR_LOG_WARNING(); <span class="comment">// Log based on sys_err_code.</span></div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno">  293</span>        err_code = sys_err_code;</div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno">  294</span>      }</div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno">  295</span>      <span class="keywordflow">else</span> <span class="comment">// if (!sys_err_code)</span></div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno">  296</span>      {</div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno">  297</span>        <span class="keyword">auto</span> local_hndl = <a class="code hl_typedef" href="namespaceipc_1_1transport.html#a7ee4551983d9df16ec16a3139bac50e8">Native_handle</a>(local_hndl_asio.release());</div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno">  298</span>        <span class="keyword">auto</span> remote_hndl = <a class="code hl_typedef" href="namespaceipc_1_1transport.html#a7ee4551983d9df16ec16a3139bac50e8">Native_handle</a>(remote_hndl_asio.release());</div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno">  299</span> </div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno">  300</span>        <span class="comment">/* Before we do our local stuff we should enable the other side to do the complementary thing:</span></div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno">  301</span><span class="comment">         * send them (with return ack) `remote_hndl`. */</span></div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno">  302</span>        <span class="keyword">auto</span> msg = Base::master_channel()-&gt;create_msg();</div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno">  303</span>        msg.body_root()-&gt;initJemallocShmSetup();</div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno">  304</span>        msg.store_native_handle_or_null(std::move(remote_hndl));</div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno">  305</span>        <span class="comment">// We don&#39;t care about contents of the ack (it&#39;s just an ack).</span></div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno">  306</span>        <span class="keywordflow">if</span> ((!Base::master_channel()-&gt;sync_request(msg, <span class="keyword">nullptr</span>, &amp;err_code)) <span class="comment">// @todo Consider using finite timeout.</span></div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno">  307</span>            &amp;&amp; (!err_code))</div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno">  308</span>        {</div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno">  309</span>          <span class="comment">/* Annoying corner case.  Incoming-direction error occurred on master_channel() before we could</span></div>
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno">  310</span><span class="comment">           * sync_request(); it&#39;ll be reported through its on-error handler.  We really don&#39;t want to enter</span></div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno">  311</span><span class="comment">           * async-land and wait for that, though: we&#39;re technically in almost-PEER state already and merely</span></div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno">  312</span><span class="comment">           * haven&#39;t informed user of that via their on_done_func().  Let&#39;s just report a catch-all thing;</span></div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno">  313</span><span class="comment">           * in any case the true error is logged when detected earlier inside struc::Channel. */</span></div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno">  314</span>          err_code = <a class="code hl_enumvalue" href="namespaceipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1error.html#a9723fe7e789d5d2d670c42d32238f223ade42420a2669dcfe1a31bc410c1fd8b4">error::Code::S_SERVER_MASTER_SHM_UNEXPECTED_TRANSPORT_ERROR</a>;</div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno">  315</span>        }</div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno">  316</span>        <span class="comment">/* else if ((!sync_request()) &amp;&amp; err_code) { New error detected via sync_request(). }</span></div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno">  317</span><span class="comment">         * else { All good so far.  Ready for init_shm()! } */</span></div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno">  318</span> </div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno">  319</span>        <span class="keywordflow">if</span> (!err_code)</div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno">  320</span>        {</div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno">  321</span>          err_code = Base::init_shm(std::move(local_hndl), <a class="code hl_typedef" href="namespaceipc_1_1session.html#a6d07d9996af19e57eb42416e914110ea">Shared_name</a>(), app_shm_ptr());</div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno">  322</span>          <span class="comment">/* If that returned falsy: Fantastic.  To quote our mission from earlier:</span></div>
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno">  323</span><span class="comment">           * &quot;Now session_shm(), shm_session(), and registering of the former (and of app_shm()) into shm_session().</span></div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno">  324</span><span class="comment">           *  Base::init_shm() takes care of all of it.&quot;  It INFO-logged too. */</span></div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno">  325</span> </div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno">  326</span>          <span class="keywordflow">if</span> (!err_code)</div>
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno">  327</span>          {</div>
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno">  328</span>            <span class="comment">/* One last thing.  We also need to do this for each arena (we have the two; but Session_server takes care</span></div>
<div class="line"><a id="l00329" name="l00329"></a><span class="lineno">  329</span><span class="comment">             * of it for app_shm() upon creating it; which -- reminder -- occurs only the first time a session for</span></div>
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno">  330</span><span class="comment">             * that Client_app appears; we may be the 2nd/3rd/... one).</span></div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno">  331</span><span class="comment">             * Need this for arena-&gt;construct&lt;T&gt;(), where T is allocator-compliant thing such as STL containers,</span></div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno">  332</span><span class="comment">             * to work. */</span></div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno">  333</span><span class="preprocessor">#ifndef NDEBUG</span></div>
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno">  334</span>            <span class="keyword">const</span> <span class="keywordtype">bool</span> ok =</div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno">  335</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno">  336</span>            Base::session_shm()-&gt;add_shm_pool_listener(srv-&gt;shm_arena_pool_listener());</div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno">  337</span>            assert(ok &amp;&amp; <span class="stringliteral">&quot;Maintenance bug?  It should only fail if already registered.&quot;</span>);</div>
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno">  338</span>          }</div>
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno">  339</span> </div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno">  340</span>        } <span class="comment">// if (!err_code) (but it may have become truthy inside)</span></div>
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno">  341</span>      } <span class="comment">// if (!sys_err_code)</span></div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno">  342</span>    } <span class="comment">// if (!err_code) (but it may have become truthy inside)</span></div>
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno">  343</span> </div>
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno">  344</span>    <span class="comment">// Be Aggressive in cleaning up early (early versus waiting for our dtor that is).</span></div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno">  345</span>    <span class="keywordflow">if</span> (err_code)</div>
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno">  346</span>    {</div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno">  347</span>      Base::reset_shm();</div>
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno">  348</span>      <span class="comment">// For cleanliness/does not matter.  (m_app_shm *pointee* can and must continue to exist for other sessions.)</span></div>
<div class="line"><a id="l00349" name="l00349"></a><span class="lineno">  349</span>      m_app_shm.reset();</div>
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno">  350</span>    }</div>
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno">  351</span> </div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno">  352</span>    on_done_func(err_code);</div>
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno">  353</span>  }); <span class="comment">// Base::Base::async_accept_log_in()</span></div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno">  354</span>} <span class="comment">// Server_session_impl::async_accept_log_in()</span></div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno">  355</span> </div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno">  356</span><a class="code hl_define" href="ipc__shm__arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2server__session__impl_8hpp.html#ab2e1ffb7b637fc3fd1ce52265c2ec985">TEMPLATE_JEM_SRV_SESSION_IMPL</a></div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"><a class="line" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html#ae2e83cdf0618060b04181ac55abd8ffd">  357</a></span><span class="keyword">typename</span> CLASS_JEM_SRV_SESSION_IMPL::Arena* CLASS_JEM_SRV_SESSION_IMPL::app_shm()</div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno">  358</span>{</div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno">  359</span>  <span class="keywordflow">return</span> m_app_shm.get();</div>
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno">  360</span>}</div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno">  361</span> </div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno">  362</span><a class="code hl_define" href="ipc__shm__arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2server__session__impl_8hpp.html#ab2e1ffb7b637fc3fd1ce52265c2ec985">TEMPLATE_JEM_SRV_SESSION_IMPL</a></div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"><a class="line" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html#ae34016bc752a1d6fb16aef7f9ab6bfa3">  363</a></span>std::shared_ptr&lt;typename CLASS_JEM_SRV_SESSION_IMPL::Arena&gt; CLASS_JEM_SRV_SESSION_IMPL::app_shm_ptr()</div>
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno">  364</span>{</div>
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno">  365</span>  <span class="keywordflow">return</span> m_app_shm;</div>
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno">  366</span>}</div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno">  367</span> </div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno">  368</span><a class="code hl_define" href="ipc__shm__arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2server__session__impl_8hpp.html#ab2e1ffb7b637fc3fd1ce52265c2ec985">TEMPLATE_JEM_SRV_SESSION_IMPL</a></div>
<div class="line"><a id="l00369" name="l00369"></a><span class="lineno">  369</span><span class="keyword">typename</span> CLASS_JEM_SRV_SESSION_IMPL::Structured_msg_builder_config</div>
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"><a class="line" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html#a0a026eaa6e6e1bb3d5d986d3da7d04db">  370</a></span>  CLASS_JEM_SRV_SESSION_IMPL::app_shm_builder_config()</div>
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno">  371</span>{</div>
<div class="line"><a id="l00372" name="l00372"></a><span class="lineno">  372</span>  <span class="keywordflow">return</span> <a class="code hl_struct" href="structipc_1_1transport_1_1struc_1_1Heap__fixed__builder_1_1Config.html">Structured_msg_builder_config</a>{ get_logger(), 0, 0, app_shm() };</div>
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno">  373</span>}</div>
<div class="line"><a id="l00374" name="l00374"></a><span class="lineno">  374</span> </div>
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno">  375</span><a class="code hl_define" href="ipc__shm__arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2server__session__impl_8hpp.html#ab2e1ffb7b637fc3fd1ce52265c2ec985">TEMPLATE_JEM_SRV_SESSION_IMPL</a></div>
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno">  376</span><span class="keyword">typename</span> CLASS_JEM_SRV_SESSION_IMPL::Structured_msg_builder_config::Builder::Session</div>
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"><a class="line" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html#af3185eb90a691384329b92080bc7fc20">  377</a></span>  CLASS_JEM_SRV_SESSION_IMPL::app_shm_lender_session()</div>
<div class="line"><a id="l00378" name="l00378"></a><span class="lineno">  378</span>{</div>
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno">  379</span>  <span class="keywordflow">return</span> Base::shm_session();</div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno">  380</span>}</div>
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno">  381</span> </div>
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno">  382</span><a class="code hl_define" href="ipc__shm__arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2server__session__impl_8hpp.html#ab2e1ffb7b637fc3fd1ce52265c2ec985">TEMPLATE_JEM_SRV_SESSION_IMPL</a></div>
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"><a class="line" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html#ab569367084e0292c7f5284c4dabe3a10">  383</a></span>std::ostream&amp; <a class="code hl_function" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a33231b969171a9103cd0a319ea10278b">operator&lt;&lt;</a>(std::ostream&amp; os, <span class="keyword">const</span> <a class="code hl_define" href="ipc__shm__arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2server__session__impl_8hpp.html#ab95c6d45b5d7bb19f68776ae7d07dda6">CLASS_JEM_SRV_SESSION_IMPL</a>&amp; val)</div>
<div class="line"><a id="l00384" name="l00384"></a><span class="lineno">  384</span>{</div>
<div class="line"><a id="l00385" name="l00385"></a><span class="lineno">  385</span>  <span class="keywordflow">return</span> os &lt;&lt; static_cast&lt;const typename CLASS_JEM_SRV_SESSION_IMPL::Base&amp;&gt;(val);</div>
<div class="line"><a id="l00386" name="l00386"></a><span class="lineno">  386</span>}</div>
<div class="line"><a id="l00387" name="l00387"></a><span class="lineno">  387</span> </div>
<div class="line"><a id="l00388" name="l00388"></a><span class="lineno">  388</span><span class="preprocessor">#undef CLASS_JEM_SRV_SESSION_IMPL</span></div>
<div class="line"><a id="l00389" name="l00389"></a><span class="lineno">  389</span><span class="preprocessor">#undef TEMPLATE_JEM_SRV_SESSION_IMPL</span></div>
<div class="line"><a id="l00390" name="l00390"></a><span class="lineno">  390</span> </div>
<div class="line"><a id="l00391" name="l00391"></a><span class="lineno">  391</span>} <span class="comment">// namespace ipc::session::shm::arena_lend::jemalloc</span></div>
<div class="ttc" id="aarena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2session__impl_8hpp_html"><div class="ttname"><a href="arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2session__impl_8hpp.html">session_impl.hpp</a></div></div>
<div class="ttc" id="aclassipc_1_1session_1_1Server__session__impl_html"><div class="ttname"><a href="classipc_1_1session_1_1Server__session__impl.html">ipc::session::Server_session_impl</a></div><div class="ttdoc">Internal, non-movable pImpl-lite implementation of Server_session_mv class template.</div><div class="ttdef"><b>Definition:</b> <a href="ipc__session_2src_2ipc_2session_2detail_2server__session__impl_8hpp_source.html#l00185">server_session_impl.hpp:188</a></div></div>
<div class="ttc" id="aclassipc_1_1session_1_1Session__base_html_a638232ef74a0eb80aeb4f027ee06f9bf"><div class="ttname"><a href="classipc_1_1session_1_1Session__base.html#a638232ef74a0eb80aeb4f027ee06f9bf">ipc::session::Session_base::Channels</a></div><div class="ttdeci">std::vector&lt; Channel_obj &gt; Channels</div><div class="ttdoc">See Session_mv. Note: If changed from vector please update those doc headers too.</div><div class="ttdef"><b>Definition:</b> <a href="session__base_8hpp_source.html#l00122">session_base.hpp:122</a></div></div>
<div class="ttc" id="aclassipc_1_1session_1_1Session__base_html_ace4dab42adec6354cc66081dd218ac71"><div class="ttname"><a href="classipc_1_1session_1_1Session__base.html#ace4dab42adec6354cc66081dd218ac71">ipc::session::Session_base::Mdt_reader_ptr</a></div><div class="ttdeci">boost::shared_ptr&lt; typename transport::struc::schema::Metadata&lt; Mdt_payload_obj &gt;::Reader &gt; Mdt_reader_ptr</div><div class="ttdoc">See Session_mv (or Session concept).</div><div class="ttdef"><b>Definition:</b> <a href="session__base_8hpp_source.html#l00128">session_base.hpp:129</a></div></div>
<div class="ttc" id="aclassipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl_html"><div class="ttname"><a href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html">ipc::session::shm::arena_lend::jemalloc::Server_session_impl</a></div><div class="ttdoc">Core internally-used implementation of shm::arena_lend::jemalloc::Server_session: it is to the latter...</div><div class="ttdef"><b>Definition:</b> <a href="ipc__shm__arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2server__session__impl_8hpp_source.html#l00053">server_session_impl.hpp:60</a></div></div>
<div class="ttc" id="aclassipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl_html_a0a026eaa6e6e1bb3d5d986d3da7d04db"><div class="ttname"><a href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html#a0a026eaa6e6e1bb3d5d986d3da7d04db">ipc::session::shm::arena_lend::jemalloc::Server_session_impl::app_shm_builder_config</a></div><div class="ttdeci">Structured_msg_builder_config app_shm_builder_config()</div><div class="ttdoc">See shm::arena_lend::jemalloc::Server_session_mv counterpart.</div><div class="ttdef"><b>Definition:</b> <a href="ipc__shm__arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2server__session__impl_8hpp_source.html#l00370">server_session_impl.hpp:370</a></div></div>
<div class="ttc" id="aclassipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl_html_a3bbc851d9731109b3b8cc76fb8fcaa6d"><div class="ttname"><a href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html#a3bbc851d9731109b3b8cc76fb8fcaa6d">ipc::session::shm::arena_lend::jemalloc::Server_session_impl::~Server_session_impl</a></div><div class="ttdeci">~Server_session_impl()</div><div class="ttdoc">Destructor.</div><div class="ttdef"><b>Definition:</b> <a href="ipc__shm__arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2server__session__impl_8hpp_source.html#l00178">server_session_impl.hpp:178</a></div></div>
<div class="ttc" id="aclassipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl_html_a419e6b9737b229b69acb21f1935279d7"><div class="ttname"><a href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html#a419e6b9737b229b69acb21f1935279d7">ipc::session::shm::arena_lend::jemalloc::Server_session_impl::Arena</a></div><div class="ttdeci">typename Base::Arena Arena</div><div class="ttdoc">See shm::arena_lend::jemalloc::Server_session_mv counterpart for public description.</div><div class="ttdef"><b>Definition:</b> <a href="ipc__shm__arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2server__session__impl_8hpp_source.html#l00072">server_session_impl.hpp:72</a></div></div>
<div class="ttc" id="aclassipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl_html_a6029703c6907e5bb96641aa94cd5cfe1"><div class="ttname"><a href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html#a6029703c6907e5bb96641aa94cd5cfe1">ipc::session::shm::arena_lend::jemalloc::Server_session_impl::m_app_shm</a></div><div class="ttdeci">std::shared_ptr&lt; Arena &gt; m_app_shm</div><div class="ttdoc">See app_shm(): The cached value from Session_server::app_shm_ptr() applicable to our opposing Client_...</div><div class="ttdef"><b>Definition:</b> <a href="ipc__shm__arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2server__session__impl_8hpp_source.html#l00163">server_session_impl.hpp:163</a></div></div>
<div class="ttc" id="aclassipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl_html_a6c68c8b048d1297d18a5e75c16a4fb76"><div class="ttname"><a href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html#a6c68c8b048d1297d18a5e75c16a4fb76">ipc::session::shm::arena_lend::jemalloc::Server_session_impl::async_accept_log_in</a></div><div class="ttdeci">void async_accept_log_in(Session_server_impl_t *srv, typename Base::Base::Channels *init_channels_by_srv_req, typename Base::Base::Mdt_reader_ptr *mdt_from_cli_or_null, typename Base::Base::Channels *init_channels_by_cli_req, Cli_app_lookup_func &amp;&amp;cli_app_lookup_func, Cli_namespace_func &amp;&amp;cli_namespace_func, Pre_rsp_setup_func &amp;&amp;pre_rsp_setup_func, N_init_channels_by_srv_req_func &amp;&amp;n_init_channels_by_srv_req_func, Mdt_load_func &amp;&amp;mdt_load_func, Task_err &amp;&amp;on_done_func)</div><div class="ttdoc">For use by internal user Session_server: See Server_session_mv counterpart.</div><div class="ttdef"><b>Definition:</b> <a href="ipc__shm__arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2server__session__impl_8hpp_source.html#l00196">server_session_impl.hpp:197</a></div></div>
<div class="ttc" id="aclassipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl_html_ae2e83cdf0618060b04181ac55abd8ffd"><div class="ttname"><a href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html#ae2e83cdf0618060b04181ac55abd8ffd">ipc::session::shm::arena_lend::jemalloc::Server_session_impl::app_shm</a></div><div class="ttdeci">Arena * app_shm()</div><div class="ttdoc">See shm::arena_lend::jemalloc::Server_session_mv counterpart.</div><div class="ttdef"><b>Definition:</b> <a href="ipc__shm__arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2server__session__impl_8hpp_source.html#l00357">server_session_impl.hpp:357</a></div></div>
<div class="ttc" id="aclassipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl_html_ae34016bc752a1d6fb16aef7f9ab6bfa3"><div class="ttname"><a href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html#ae34016bc752a1d6fb16aef7f9ab6bfa3">ipc::session::shm::arena_lend::jemalloc::Server_session_impl::app_shm_ptr</a></div><div class="ttdeci">std::shared_ptr&lt; Arena &gt; app_shm_ptr()</div><div class="ttdoc">See shm::arena_lend::jemalloc::Server_session_mv counterpart.</div><div class="ttdef"><b>Definition:</b> <a href="ipc__shm__arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2server__session__impl_8hpp_source.html#l00363">server_session_impl.hpp:363</a></div></div>
<div class="ttc" id="aclassipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl_html_af3185eb90a691384329b92080bc7fc20"><div class="ttname"><a href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Server__session__impl.html#af3185eb90a691384329b92080bc7fc20">ipc::session::shm::arena_lend::jemalloc::Server_session_impl::app_shm_lender_session</a></div><div class="ttdeci">Structured_msg_builder_config::Builder::Session app_shm_lender_session()</div><div class="ttdoc">See shm::arena_lend::jemalloc::Session_mv counterpart.</div><div class="ttdef"><b>Definition:</b> <a href="ipc__shm__arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2server__session__impl_8hpp_source.html#l00377">server_session_impl.hpp:377</a></div></div>
<div class="ttc" id="aclassipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Session__impl_html"><div class="ttname"><a href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Session__impl.html">ipc::session::shm::arena_lend::jemalloc::Session_impl</a></div><div class="ttdoc">Common data and logic for shm::arena_lend::jemalloc::Server_session_impl and shm::arena_lend::jemallo...</div><div class="ttdef"><b>Definition:</b> <a href="arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2session__impl_8hpp_source.html#l00059">session_impl.hpp:60</a></div></div>
<div class="ttc" id="aclassipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Session__impl_html_a05a924415ca44783d3ef5c0efb31f42e"><div class="ttname"><a href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Session__impl.html#a05a924415ca44783d3ef5c0efb31f42e">ipc::session::shm::arena_lend::jemalloc::Session_impl&lt; session::Server_session_impl&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload, session::schema::ShmType::JEMALLOC, transport::struc::shm::Builder_base::S_MAX_SERIALIZATION_SEGMENT_SZ, true &gt; &gt;::Arena</a></div><div class="ttdeci">ipc::shm::arena_lend::jemalloc::Ipc_arena Arena</div><div class="ttdoc">See shm::arena_lend::jemalloc::Session_mv counterpart for public description.</div><div class="ttdef"><b>Definition:</b> <a href="arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2session__impl_8hpp_source.html#l00079">session_impl.hpp:79</a></div></div>
<div class="ttc" id="aclassipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Session__impl_html_a8592edcdb25d0c824a2e72e1539c884f"><div class="ttname"><a href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Session__impl.html#a8592edcdb25d0c824a2e72e1539c884f">ipc::session::shm::arena_lend::jemalloc::Session_impl&lt; session::Server_session_impl&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload, session::schema::ShmType::JEMALLOC, transport::struc::shm::Builder_base::S_MAX_SERIALIZATION_SEGMENT_SZ, true &gt; &gt;::Structured_msg_builder_config</a></div><div class="ttdeci">typename transport::struc::shm::arena_lend::jemalloc::Builder::Config Structured_msg_builder_config</div><div class="ttdoc">See shm::arena_lend::jemalloc::Session_mv counterpart for public description.</div><div class="ttdef"><b>Definition:</b> <a href="arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2session__impl_8hpp_source.html#l00090">session_impl.hpp:90</a></div></div>
<div class="ttc" id="aclassipc_1_1transport_1_1Native__socket__stream_1_1Impl_html_a33231b969171a9103cd0a319ea10278b"><div class="ttname"><a href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a33231b969171a9103cd0a319ea10278b">ipc::transport::Native_socket_stream::Impl::operator&lt;&lt;</a></div><div class="ttdeci">std::ostream &amp; operator&lt;&lt;(std::ostream &amp;os, const Native_socket_stream::Impl &amp;val)</div><div class="ttdoc">Prints string representation of the given Native_socket_stream::Impl to the given ostream.</div><div class="ttdef"><b>Definition:</b> <a href="detail_2native__socket__stream__impl_8cpp_source.html#l00225">native_socket_stream_impl.cpp:225</a></div></div>
<div class="ttc" id="aclassipc_1_1transport_1_1struc_1_1Heap__fixed__builder_html_ab01fea591145a42c216a5bb396cf0be7"><div class="ttname"><a href="classipc_1_1transport_1_1struc_1_1Heap__fixed__builder.html#ab01fea591145a42c216a5bb396cf0be7">ipc::transport::struc::Heap_fixed_builder::Session</a></div><div class="ttdeci">Null_session Session</div><div class="ttdoc">Implements concept API.</div><div class="ttdef"><b>Definition:</b> <a href="heap__serializer_8hpp_source.html#l00177">heap_serializer.hpp:177</a></div></div>
<div class="ttc" id="aclassipc_1_1transport_1_1struc_1_1shm_1_1Builder__base_html_a2dae5df49d355c6f2199af42fff9befd"><div class="ttname"><a href="classipc_1_1transport_1_1struc_1_1shm_1_1Builder__base.html#a2dae5df49d355c6f2199af42fff9befd">ipc::transport::struc::shm::Builder_base::S_MAX_SERIALIZATION_SEGMENT_SZ</a></div><div class="ttdeci">static constexpr size_t S_MAX_SERIALIZATION_SEGMENT_SZ</div><div class="ttdoc">A message of this size will be able to completely contain the (single) segment emitted by Builder::em...</div><div class="ttdef"><b>Definition:</b> <a href="ipc__shm_2src_2ipc_2transport_2struc_2shm_2serializer_8hpp_source.html#l00048">serializer.hpp:48</a></div></div>
<div class="ttc" id="aipc__session_2src_2ipc_2session_2detail_2server__session__impl_8hpp_html"><div class="ttname"><a href="ipc__session_2src_2ipc_2session_2detail_2server__session__impl_8hpp.html">server_session_impl.hpp</a></div></div>
<div class="ttc" id="aipc__session_2src_2ipc_2session_2error_8hpp_html"><div class="ttname"><a href="ipc__session_2src_2ipc_2session_2error_8hpp.html">error.hpp</a></div></div>
<div class="ttc" id="aipc__shm__arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2server__session__impl_8hpp_html_ab2e1ffb7b637fc3fd1ce52265c2ec985"><div class="ttname"><a href="ipc__shm__arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2server__session__impl_8hpp.html#ab2e1ffb7b637fc3fd1ce52265c2ec985">TEMPLATE_JEM_SRV_SESSION_IMPL</a></div><div class="ttdeci">#define TEMPLATE_JEM_SRV_SESSION_IMPL</div><div class="ttdoc">Internally used macro; public API users should disregard (same deal as in struc/channel....</div><div class="ttdef"><b>Definition:</b> <a href="ipc__shm__arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2server__session__impl_8hpp_source.html#l00171">server_session_impl.hpp:171</a></div></div>
<div class="ttc" id="aipc__shm__arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2server__session__impl_8hpp_html_ab95c6d45b5d7bb19f68776ae7d07dda6"><div class="ttname"><a href="ipc__shm__arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2server__session__impl_8hpp.html#ab95c6d45b5d7bb19f68776ae7d07dda6">CLASS_JEM_SRV_SESSION_IMPL</a></div><div class="ttdeci">#define CLASS_JEM_SRV_SESSION_IMPL</div><div class="ttdoc">Internally used macro; public API users should disregard (same deal as in struc/channel....</div><div class="ttdef"><b>Definition:</b> <a href="ipc__shm__arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2server__session__impl_8hpp_source.html#l00174">server_session_impl.hpp:174</a></div></div>
<div class="ttc" id="anamespaceipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1error_html_a9723fe7e789d5d2d670c42d32238f223ade42420a2669dcfe1a31bc410c1fd8b4"><div class="ttname"><a href="namespaceipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1error.html#a9723fe7e789d5d2d670c42d32238f223ade42420a2669dcfe1a31bc410c1fd8b4">ipc::session::shm::arena_lend::jemalloc::error::Code::S_SERVER_MASTER_SHM_UNEXPECTED_TRANSPORT_ERROR</a></div><div class="ttdeci">@ S_SERVER_MASTER_SHM_UNEXPECTED_TRANSPORT_ERROR</div><div class="ttdoc">Session opening: While trying to transmit resource for internal-IPC use in an arena-lending SHM-provi...</div></div>
<div class="ttc" id="anamespaceipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_html"><div class="ttname"><a href="namespaceipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc.html">ipc::session::shm::arena_lend::jemalloc</a></div><div class="ttdoc">Support for SHM-backed ipc::session sessions and session-servers with the SHM-jemalloc (ipc::shm::are...</div><div class="ttdef"><b>Definition:</b> <a href="ipc__shm__arena__lend_2src_2ipc_2session_2detail_2shm_2arena__lend_2jemalloc_2client__session__impl_8hpp_source.html#l00034">client_session_impl.hpp:35</a></div></div>
<div class="ttc" id="anamespaceipc_1_1session_html_a6d07d9996af19e57eb42416e914110ea"><div class="ttname"><a href="namespaceipc_1_1session.html#a6d07d9996af19e57eb42416e914110ea">ipc::session::Shared_name</a></div><div class="ttdeci">util::Shared_name Shared_name</div><div class="ttdoc">Convenience alias for the commonly used type util::Shared_name.</div><div class="ttdef"><b>Definition:</b> <a href="session__fwd_8hpp_source.html#l00245">session_fwd.hpp:245</a></div></div>
<div class="ttc" id="anamespaceipc_1_1transport_1_1asio__local__stream__socket_html_a1788f9dbd896bb71b3693f9ae25b40ae"><div class="ttname"><a href="namespaceipc_1_1transport_1_1asio__local__stream__socket.html#a1788f9dbd896bb71b3693f9ae25b40ae">ipc::transport::asio_local_stream_socket::Peer_socket</a></div><div class="ttdeci">Protocol::socket Peer_socket</div><div class="ttdoc">Short-hand for boost.asio Unix domain peer stream-socket (usually-connected-or-empty guy).</div><div class="ttdef"><b>Definition:</b> <a href="asio__local__stream__socket__fwd_8hpp_source.html#l00114">asio_local_stream_socket_fwd.hpp:114</a></div></div>
<div class="ttc" id="anamespaceipc_1_1transport_html_a7ee4551983d9df16ec16a3139bac50e8"><div class="ttname"><a href="namespaceipc_1_1transport.html#a7ee4551983d9df16ec16a3139bac50e8">ipc::transport::Native_handle</a></div><div class="ttdeci">util::Native_handle Native_handle</div><div class="ttdoc">Convenience alias for the commonly used type util::Native_handle.</div><div class="ttdef"><b>Definition:</b> <a href="transport__fwd_8hpp_source.html#l00081">transport_fwd.hpp:81</a></div></div>
<div class="ttc" id="anamespaceipc_html_aa3192e586cc45d3e7c22463bf2760f89"><div class="ttname"><a href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89">ipc::Error_code</a></div><div class="ttdeci">flow::Error_code Error_code</div><div class="ttdoc">Short-hand for flow::Error_code which is very common.</div><div class="ttdef"><b>Definition:</b> <a href="common_8hpp_source.html#l00298">common.hpp:298</a></div></div>
<div class="ttc" id="astructipc_1_1transport_1_1struc_1_1Heap__fixed__builder_1_1Config_html"><div class="ttname"><a href="structipc_1_1transport_1_1struc_1_1Heap__fixed__builder_1_1Config.html">ipc::transport::struc::Heap_fixed_builder::Config</a></div><div class="ttdoc">Implements Struct_builder::Config sub-concept.</div><div class="ttdef"><b>Definition:</b> <a href="heap__serializer_8hpp_source.html#l00154">heap_serializer.hpp:155</a></div></div>
<div class="ttc" id="astructipc_1_1util_1_1Native__handle_html"><div class="ttname"><a href="structipc_1_1util_1_1Native__handle.html">ipc::util::Native_handle</a></div><div class="ttdoc">A monolayer-thin wrapper around a native handle, a/k/a descriptor a/k/a FD.</div><div class="ttdef"><b>Definition:</b> <a href="native__handle_8hpp_source.html#l00062">native_handle.hpp:63</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Apr 11 2025 20:02:26 for Flow-IPC by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
</small></address>
</body>
</html>
